/**
 * 异步文件写入
 */

let fs = require("fs");

/**
 * 在fs模块中 函数(方法) 没出现 sync的就是异步函数
 * 
 */
/**
 * fs.open(path[, flags[, mode]], callback)
 * path 路劲
 * flags r w a
 * mode 不管，在window上跟本无效
 * callback 回调
 */
/**
 * 在fs中异步函数都是没有返回值
 * callback 形参 err 错误信息 fd 文件描述符
 * 
 */
/**
 * 计算机基础知识： cpu 内存 磁盘
 *                 cpu 指挥者--------->磁盘(查找文件过程耗时相对cpu很慢,
 *                   如果在同步代码中呢cpu就喝喝茶了,在异步中呢cpu不能休息，继续干活! )
 * 
 * 
 */
/**
 * 异步好1？同步好2？
 * 其实呢，要看场景的哦
 * 
 */
let fd=fs.open('./asyncFileDemo1.txt','w',function(err,fd){
    //console.log(" 我进来了哦,我在上面哦");
    //console.log(arguments);
    if(err){
        console.log(err);
    }else{
        //let str ='今天学习了异步文件的写入,好难哦，好晕哦，我要放弃！从入门到放弃！'
        let str ='today学习了异步文件的写入,好难哦，好晕哦，我要放弃！从入门到放弃！'
        //我们是哟个  writeSync(fd: number, buffer)
        // 方案一 用同步方式写入关闭
        // 字符串--转buffer
        // fs.writeSync(fd,Buffer.from(str));
        // fs.closeSync(fd);
        // 方案二 用异步方式写入
        // fs.write(fd, buffer[, offset[, length[, position]]], callback);
        // fd             文件描述符号
        // buffer buffer  对象
        // offset         偏移量  buffer的下标的偏移量
        // length         长度    offet 后对应的字符串的长度
        // callback       回调函数
        // buffer--->string buffer 转 string bf.tostring();
        let bf =Buffer.from(str);
        fs.write(fd,bf,function(err,writelentgh,bf2){
            
             console.log(bf2.toString());
        });
        //关闭
        fs.close(fd,function(err){
            if(err){
                console.log(err);
            }
        });

    }
});
//console.log(fd);
console.log("我在下面哦");




